package com.AdvancedDemos.FileAndIO;

import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import java.util.function.BiConsumer;

public class 统计当前项目下所有类型文件数量 {
    static int count = 0;

    public static void main(String[] args) {
        //需求:统计当前项目下所有类型文件数量
        //tips:文件类型(后缀名)是唯一的,数量进行变更   后缀名和数量是键值对关系
        //[文件名.后缀名]
        File path = new File("helloworld");
        ArrayList<String> list = new ArrayList<>();
        extracted(path, list);//递归遍历文件夹,将所有文件名添加到list中
        System.out.println("共有" + count + "个文件!");

        Map<String, Integer> map = new HashMap<>();
        for (String fileName : list) {
//            System.out.println(fileName);
            String suffix;
            if (!fileName.contains(".")) {
                suffix = "无类型文件";
            } else {
                String[] split = fileName.split("\\.");//支持正则表达式,.在正则规则中表示任意字符,\.表示字符.,所以以.作为分隔符时需要转义"\\.",如 String[] split = fileName.split("\\.");,另外还支持使用|连接多种分隔符,同时分隔,如 String[] strings = str.split("/|\\.");
                suffix = split[1];
            }

            if (map.containsKey(suffix)) {
                //说明不是第一次遇到该种文件名后缀
                map.put(suffix, map.get(suffix) + 1);
            } else {
                //说明是第一次遇到该种文件名后缀
                map.put(suffix, 1);
            }
        }
        map.forEach(new BiConsumer<String, Integer>() {
            @Override
            public void accept(String key, Integer value) {
                System.out.println("." + key + ":" + value + "次");
                //共有1270个文件!
                //.txt:2次
                //.java:150次
                //.json:1次
                //.iml:1次
                //.无类型文件:1103次
                //.sample:13次
            }
        });

    }

    private static void extracted(File path, ArrayList<String> list) {
        File[] files = path.listFiles();
        for (File file : files) {
//            System.out.println(file);
            if (file.isFile()) {
                //是文件
                String name = file.getName();
                System.out.println(name);
                list.add(name);
                count++;
            } else {
                //是文件夹
                extracted(file, list);
            }
        }
    }
}
